﻿using System;
using System.IO;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Text;
using KhanhPhong;
using KhanhPhong.Helper;
using KhanhPhong.POSDeviceController;
using C1.Win.C1FlexGrid;

namespace KhanhPhong.BillPrintingFormat
{
    public class TranQuangKy
    {
        public static string BillHeader(string CompanyName, string CompanyAddress, string CompanyPhone)
        {
            string companyName = Helper.Format.CorrectSizeString(CompanyName, 33, false);
            string companyAddress = Helper.Format.CorrectSizeString(CompanyAddress, 33, false);
            string companyPhone = Helper.Format.CorrectSizeString("TEL: " + CompanyPhone, 33, true);

            string result = File.ReadAllText("./TQKBillHeader.conf").Trim();
            result = Helper.Format.FormatConfigString(result, '+');
            
            result = result.Replace("companyname", companyName);
            result = result.Replace("companyaddress", companyAddress);
            result = result.Replace("companyphone", companyPhone);

            return result;
        }

        public static string BillInfo(string Bill_ID, string Table_Name, string Order_Date, string Service_Staff)
        {
            string hoaDon = "STT: " + Bill_ID;
            string ban = "Bàn: " + Table_Name;
            string nhanVien = "NV thu ngân: " + Service_Staff;
            string ngayDat = Order_Date;

            string result = File.ReadAllText("./TQKBillInfo.conf").Trim();
            result = Helper.Format.FormatConfigString(result, '+');

            result = result.Replace("hoadon", hoaDon);
            result = result.Replace("ban", ban);
            result = result.Replace("ngaydat", ngayDat);
            result = result.Replace("nhanvien", nhanVien);

            return result;
        }

        public static string BillDetails(C1FlexGrid gridData, char splitChar)
        {
            string[] _result = File.ReadAllText("./TQKBillDetails.conf").Trim().Replace(" ", "").Split(splitChar);

            string str1 = _result[0];
            string type1 = str1.Substring(0, str1.IndexOf("(") - 1);
            string align1 = str1.Substring(str1.IndexOf("("), str1.IndexOf(")") - str1.IndexOf("(") - 1).Split(',')[0];
            int pad1 = int.Parse(str1.Substring(str1.IndexOf("("), str1.IndexOf(")") - str1.IndexOf("(") - 1).Split(',')[1]);

            string str2 = _result[1];
            string type2 = str2.Substring(0, str2.IndexOf("(") - 1);
            string align2 = str2.Substring(str2.IndexOf("("), str2.IndexOf(")") - str2.IndexOf("(") - 1).Split(',')[0];
            int pad2 = int.Parse(str2.Substring(str2.IndexOf("("), str2.IndexOf(")") - str2.IndexOf("(") - 1).Split(',')[1]);

            string str3 = _result[2];
            string type3 = str3.Substring(0, str3.IndexOf("(") - 1);
            string align3 = str3.Substring(str3.IndexOf("("), str3.IndexOf(")") - str3.IndexOf("(") - 1).Split(',')[0];
            int pad3 = int.Parse(str3.Substring(str3.IndexOf("("), str3.IndexOf(")") - str3.IndexOf("(") - 1).Split(',')[1]);

            string str4 = _result[3];
            string type4 = str4.Substring(0, str4.IndexOf("(") - 1);
            string align4 = str4.Substring(str4.IndexOf("("), str4.IndexOf(")") - str4.IndexOf("(") - 1).Split(',')[0];
            int pad4 = int.Parse(str4.Substring(str4.IndexOf("("), str4.IndexOf(")") - str4.IndexOf("(") - 1).Split(',')[1]);

            string str5 = _result[4];
            string type5 = str5.Substring(0, str5.IndexOf("(") - 1);
            string align5 = str5.Substring(str5.IndexOf("("), str5.IndexOf(")") - str5.IndexOf("(") - 1).Split(',')[0];
            int pad5 = int.Parse(str5.Substring(str5.IndexOf("("), str5.IndexOf(")") - str5.IndexOf("(") - 1).Split(',')[1]);

            string _Mon = "Món";
            string _Gia = "Giá";
            string _Giam = "Giảm";
            string _SL = "SL";
            string _Tien = "Tiền";

            switch (type1.ToLower())
            {
                case "mon":
                    _Mon = align1.Equals("L") ? _Mon.PadRight(pad1) : _Mon.PadLeft(pad1);
                    break;
                case "gia":
                    _Gia = align1.Equals("L") ? _Gia.PadRight(pad1) : _Gia.PadLeft(pad1);
                    break;
                case "giam":
                    _Giam = align1.Equals("L") ? _Giam.PadRight(pad1) : _Giam.PadLeft(pad1);
                    break;
                case "sl":
                    _SL = align1.Equals("L") ? _SL.PadRight(pad1) : _SL.PadLeft(pad1);
                    break;
                case "tien":
                    _Tien = align1.Equals("L") ? _Tien.PadRight(pad1) : _Tien.PadLeft(pad1);
                    break;
            }

            switch (type2.ToLower())
            {
                case "mon":
                    _Mon = align2.Equals("L") ? _Mon.PadRight(pad2) : _Mon.PadLeft(pad2);
                    break;
                case "gia":
                    _Gia = align2.Equals("L") ? _Gia.PadRight(pad2) : _Gia.PadLeft(pad2);
                    break;
                case "giam":
                    _Giam = align2.Equals("L") ? _Giam.PadRight(pad2) : _Giam.PadLeft(pad2);
                    break;
                case "sl":
                    _SL = align2.Equals("L") ? _SL.PadRight(pad2) : _SL.PadLeft(pad2);
                    break;
                case "tien":
                    _Tien = align2.Equals("L") ? _Tien.PadRight(pad2) : _Tien.PadLeft(pad2);
                    break;
            }

            switch (type3.ToLower())
            {
                case "mon":
                    _Mon = align3.Equals("L") ? _Mon.PadRight(pad3) : _Mon.PadLeft(pad3);
                    break;
                case "gia":
                    _Gia = align3.Equals("L") ? _Gia.PadRight(pad3) : _Gia.PadLeft(pad3);
                    break;
                case "giam":
                    _Giam = align3.Equals("L") ? _Giam.PadRight(pad3) : _Giam.PadLeft(pad3);
                    break;
                case "sl":
                    _SL = align3.Equals("L") ? _SL.PadRight(pad3) : _SL.PadLeft(pad3);
                    break;
                case "tien":
                    _Tien = align3.Equals("L") ? _Tien.PadRight(pad3) : _Tien.PadLeft(pad3);
                    break;
            }

            switch (type4.ToLower())
            {
                case "mon":
                    _Mon = align4.Equals("L") ? _Mon.PadRight(pad4) : _Mon.PadLeft(pad4);
                    break;
                case "gia":
                    _Gia = align4.Equals("L") ? _Gia.PadRight(pad4) : _Gia.PadLeft(pad4);
                    break;
                case "giam":
                    _Giam = align4.Equals("L") ? _Giam.PadRight(pad4) : _Giam.PadLeft(pad4);
                    break;
                case "sl":
                    _SL = align4.Equals("L") ? _SL.PadRight(pad4) : _SL.PadLeft(pad4);
                    break;
                case "tien":
                    _Tien = align4.Equals("L") ? _Tien.PadRight(pad4) : _Tien.PadLeft(pad4);
                    break;
            }

            switch (type5.ToLower())
            {
                case "mon":
                    _Mon = align5.Equals("L") ? _Mon.PadRight(pad5) : _Mon.PadLeft(pad5);
                    break;
                case "gia":
                    _Gia = align5.Equals("L") ? _Gia.PadRight(pad5) : _Gia.PadLeft(pad5);
                    break;
                case "giam":
                    _Giam = align5.Equals("L") ? _Giam.PadRight(pad5) : _Giam.PadLeft(pad5);
                    break;
                case "sl":
                    _SL = align5.Equals("L") ? _SL.PadRight(pad5) : _SL.PadLeft(pad5);
                    break;
                case "tien":
                    _Tien = align5.Equals("L") ? _Tien.PadRight(pad5) : _Tien.PadLeft(pad5);
                    break;
            }

            // Tiêu đề cột nội dung chi tiết hóa đơn
            string colTitle = "Món".PadRight(9) + " " + "Giá".PadLeft(6) + " " + "Giảm".PadLeft(5) + " " + "SL".PadLeft(2) + " " + "Tiền".PadLeft(7);

            // Nội dung chi tiết hóa đơn
            string billContent = string.Empty;
            for (int i = 1; i < gridData.Rows.Count; i++)
            {
                string mon = Format.CorrectSizeString(gridData.GetData(i, 1).ToString(), 9, false);
                string gia = gridData.GetData(i, 3).ToString().PadLeft(6);
                string giam = gridData.GetData(i, 4).ToString().PadLeft(5);
                string soLuong = gridData.GetData(i, 5).ToString().PadLeft(2);
                string thanhTien = gridData.GetData(i, 6).ToString().PadLeft(7);

                // Thêm gạch dưới vào dòng cuối cùng
                // if (i == gridMakeBill.Rows.Count - 1) BillContent += Printer.Underline;

                billContent += mon + " " + gia + " " + giam + " " + soLuong + " " + thanhTien + "\n";
            }

            string result = Printer.Bold + colTitle + Printer.Normal + "\n" + billContent + Printer.Normal;

            return result;
        }
    }
}
